In multiprocessor systems, multiple central processing units share data in memory. It is desirable that the MP system maintain "coherency" among all data in the shared memory. Data could exist in several different locations including a high speed cache memory, as well as a main memory. Coherency refers to the concept in which each central processing unit (CPU) must have access to the most recently modified data corresponding to a particular address in the shared memory. In other words, if a particular data at a certain address is most recently modified in one of the memory locations, then the most recently modified data must be identified and available to all CPU's requesting the particular data.
An example of a way to maintain coherency in the system is to monitor reads and writes to the main memory. When either a memory read or a memory write of data at an address is detected, this address is used as a snoop address. A snoop request is initiated, directed to all of the cache memories in the multiprocessor system to search for any address in the cache memories that matches the snoop address. A snoop hit occurs for every match, and any needed corrective action is taken to maintain coherency of the data at the address in the cache where the snoop hit occurs.
In normal operation of a high performance multiprocessor system having cache memory, there are usually several requests for cache data pending at any given time. In order to keep track of these requests and handle them efficiently, buffer queues coupled with the cache memory in a cache subsystem are needed. However, it is difficult both to maintain the cache subsystem at a high level of performance for local code, and at the same time to provide efficient support for snoop requests. What is needed is a method and apparatus for providing efficient snooping of both cache memory and any associated buffer queues.